<?php
/**
 * Modelo de calculo de frete dos correios
 * @author Emanuel Melo e Renato Lenz @ PC4 Team
 */
class PC4_Util_Frete_Correio implements PC4_Util_Frete {

	function calcula($dados, $debug = false) {
		$xml = $this->getDados($dados, $debug);
		if ($xml->Erro == 0) {
			$frete = sqlPreco($xml->Valor);
		}
		else {
			$frete = (string)$xml->MsgErro;
		}
		return $frete;
	}
	/**
	 * Recupera informações sobre o frete
	 * @param array $dados array de informacoes necessarias para o calculo
	 * @param bool $debug
	 * @return SimpleXMLElement xml com os dados de resposta
	 */
	function getDados($dados, $debug = false) {
		if (empty($dados['formato'])) {
			$dados['formato'] = 1;
		}
		if (empty($dados['maoPropria'])) {
			$dados['maoPropria'] = 'n';
		}
		if (empty($dados['diametro'])) {
			$dados['diametro'] = 0;
		}
		$url = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoPrazo?' .
			'nCdEmpresa=' . $dados['codigoEmpresa'] .
			'&sDsSenha=' . $dados['senha'] .
			'&sCepOrigem=' . str_replace('-', '', $dados['cepOrigem']) .
			'&sCepDestino=' . str_replace('-', '', $dados['cepDestino']) .
			'&nVlPeso=' . $dados['peso'] .
			'&nCdFormato=' . $dados['formato'] .
			'&nVlComprimento=' . number_format($dados['comprimento'], 2, ',', '') .
			'&nVlAltura=' . number_format($dados['altura'], 2, ',', '') .
			'&nVlLargura=' . number_format($dados['largura'], 2, ',', '') .
			'&sCdMaoPropria=' . $dados['maoPropria'] .
			'&nVlValorDeclarado=' . (int)$dados['valorDeclarado'] .
			'&sCdAvisoRecebimento=' . $dados['avisoRecebimento'] .
			'&nCdServico=' . $dados['codigoServico'] .
			'&nVlDiametro=' . number_format($dados['diametro'], 2, ',', '') .
			'&StrRetorno=xml';
		if ($debug) {
			d($url, 'url');
		}
		$xml = file_get_contents_curl($url);
		if ($debug) {
			d($xml, 'xml');
		}
		$xml = simplexml_load_string($xml)->Servicos->cServico;
		return $xml;
	}
	
}